/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.sigepa.recocidosimulado.capadatos.pruebas;

import com.mysema.query.jpa.impl.JPAQuery;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import pe.edu.pucp.sigepa.recocidosimulado.Controlador.EstadoAvionJpaController;
import pe.edu.pucp.sigepa.recocidosimulado.Modelo.Aeropuerto;
import pe.edu.pucp.sigepa.recocidosimulado.Modelo.EstadoAvion;
import pe.edu.pucp.sigepa.recocidosimulado.Modelo.Pronostico;
import pe.edu.pucp.sigepa.recocidosimulado.Modelo.QAeropuerto;
import pe.edu.pucp.sigepa.recocidosimulado.Modelo.QPronostico;
import pe.edu.pucp.sigepa.recocidosimulado.Modelo.QVuelo;
import pe.edu.pucp.sigepa.recocidosimulado.Modelo.Vuelo;

/**
 *
 * @author carloslengua
 */
public class CapaDatosPruebas {

    public CapaDatosPruebas() {
    }
    
    //PRUEBAS
    public EstadoAvion prueba0_obtenerEstadoAvion(Integer estadoAvionId) {
        //Obtener estado avion

        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("motor-generador-rutas-RSPU", System.getProperties());
        
        EstadoAvionJpaController estadoAvionJpaController = new EstadoAvionJpaController(null, emf);
        
        EstadoAvion estadoAvion = estadoAvionJpaController.findEstadoAvion(estadoAvionId);
        
        return estadoAvion;    
    
    }//OK
    
    //solo el de lima
    public List<Aeropuerto> prueba1() {
    
        JPAQuery consulta = new JPAQuery(
                                    Persistence.createEntityManagerFactory("pe.edu.pucp_motor-generador-rutas-RS2_jar_1.0-SNAPSHOTPU", System.getProperties())
                                        .createEntityManager());
        
        QAeropuerto aeropuerto = QAeropuerto.aeropuerto;
        
        List<Aeropuerto> aeropuertos = consulta.from(aeropuerto)
                                            .list(aeropuerto);
        
        
        return aeropuertos;
    }
    
    
    // inventario en el futuro
    public void retornarInventarioActual_UnSoloAeropuerto() {

        JPAQuery consulta = new JPAQuery(
                                    Persistence.createEntityManagerFactory("pe.edu.pucp_motor-generador-rutas-RS2_jar_1.0-SNAPSHOTPU", System.getProperties())
                                        .createEntityManager());        
    
        QPronostico pronostico = QPronostico.pronostico;
        
        Date fechaHoraSimulacion = new Date();
        
        Integer inventarioActual;
        inventarioActual = consulta.from(pronostico)
                                .where(pronostico.fechareg.before(fechaHoraSimulacion)
                                        .and(pronostico.aeropuerto.idaeropuerto.eq(4)))
                                .uniqueResult(pronostico.nropack.sum());
        
        System.out.println("Resultado ejecucion retornarInventario actual...");
        System.out.println("inventarioActual = " + inventarioActual);
                                   
        
    }//ok
    
    public void retornarInventarioActual() {

        JPAQuery consulta = new JPAQuery(
                                    Persistence.createEntityManagerFactory("pe.edu.pucp_motor-generador-rutas-RS2_jar_1.0-SNAPSHOTPU", System.getProperties())
                                        .createEntityManager());        
    
        QPronostico pronostico = QPronostico.pronostico;
        
        Date fechaHoraSimulacion = new Date();
        
        List<Pronostico> pronosticos = consulta.from(pronostico)
                                        .where(pronostico.fechareg.before(fechaHoraSimulacion))
                                        .list(pronostico);
        
        
        System.out.println("Resultado ejecucion retornarInventarioActual...");        
        for (Pronostico pronosticoAct : pronosticos) {
            System.out.println(pronosticoAct);
        }
                                   
        
    }//ok    
    
    public void prueba3() {
//        throw new UnsupportedOperationException("Not supported yet.");

        JPAQuery consulta = new JPAQuery(
                                    Persistence.createEntityManagerFactory("pe.edu.pucp_motor-generador-rutas-RS2_jar_1.0-SNAPSHOTPU", System.getProperties())
                                        .createEntityManager());       
        
        
//        Solucion solucion;
//        Pair<Vuelo, Vuelo> parDeVuelosADirectear;
 
        QVuelo vueloX = QVuelo.vuelo;
        QVuelo vuelo0 = new QVuelo("vuelo0");
        QVuelo vuelo1 = new QVuelo("vuelo1");
        QVuelo vuelo2 = new QVuelo("vuelo2");
        QVuelo vuelo3 = new QVuelo("vuelo3");
        
        List<Vuelo> vuelos = consulta.from(vueloX, vuelo0, vuelo1, vuelo2, vuelo3)
                                .where(vuelo0.aeropuertoDestino.eq(vuelo1.aeropuertoOrigen)
                                    .and(vuelo0.llegadaest.before(vuelo1.salidaest))
                                    .and(vuelo1.aeropuertoDestino.eq(vuelo2.aeropuertoOrigen))
                                    .and(vuelo1.llegadaest.before(vuelo2.salidaest))
                                    .and(vuelo2.aeropuertoDestino.eq(vuelo3.aeropuertoOrigen))
                                    .and(vuelo2.llegadaest.before(vuelo3.salidaest))
                                    .and(vueloX.aeropuertoOrigen.eq(vuelo1.aeropuertoOrigen))
                                    .and(vueloX.aeropuertoDestino.eq(vuelo2.aeropuertoDestino))
                                    .and(vuelo0.llegadaest.before(vueloX.salidaest))
                                    .and(vueloX.llegadaest.before(vuelo3.salidaest)))
                                .distinct()
                                .list(vueloX);
        
//        List<Object[]> vuelos;        
//        vuelos = consulta.from(vuelo0, vuelo1)
//                    .where(vuelo0.aeropuertoDestino.eq(vuelo1.aeropuertoOrigen)
//                        .and(vuelo0.llegadaest.before(vuelo1.salidaest)))        
//                    .list(vuelo0, vuelo1);
//        
//        List<Vuelo> vuelos = consulta.from(vueloX)
//                                .list(vueloX);  
        
//        for(Object[] parDeVuelos : vuelos) {
//            System.out.println(parDeVuelos[0] + " | " + parDeVuelos[1]);
//        }
        
        for(Vuelo vuelo : vuelos) {
            System.out.println(vuelo);
        }        
                                        
    }//ok 
    
    public void prueba4() {
//        throw new UnsupportedOperationException("Not supported yet.");

        JPAQuery consulta = new JPAQuery(
                                    Persistence.createEntityManagerFactory("pe.edu.pucp_motor-generador-rutas-RS2_jar_1.0-SNAPSHOTPU", System.getProperties())
                                        .createEntityManager());       
        
        
//        Solucion solucion;
//        Pair<Vuelo, Vuelo> parDeVuelosADirectear;
 
        QVuelo vueloX = QVuelo.vuelo;
        QVuelo vuelo0 = new QVuelo("vuelo0");
        QVuelo vuelo1 = new QVuelo("vuelo1");
        QVuelo vuelo2 = new QVuelo("vuelo2");
        QVuelo vuelo3 = new QVuelo("vuelo3");
        
        List<Vuelo> vuelos = consulta.from(vueloX, vuelo0, vuelo1, vuelo2, vuelo3)
                                .where(vuelo0.aeropuertoDestino.eq(vuelo1.aeropuertoOrigen)
                                    .and(vuelo0.llegadaest.before(vuelo1.salidaest))
                                    .and(vuelo1.aeropuertoDestino.eq(vuelo2.aeropuertoOrigen))
                                    .and(vuelo1.llegadaest.before(vuelo2.salidaest))
                                    .and(vuelo2.aeropuertoDestino.eq(vuelo3.aeropuertoOrigen))
                                    .and(vuelo2.llegadaest.before(vuelo3.salidaest))
                                    .and(vueloX.aeropuertoOrigen.eq(vuelo1.aeropuertoOrigen))
                                    .and(vueloX.aeropuertoDestino.eq(vuelo2.aeropuertoDestino))
                                    .and(vuelo0.llegadaest.before(vueloX.salidaest))
                                    .and(vueloX.llegadaest.before(vuelo3.salidaest)))
                                .distinct()
                                .list(vueloX);
        
//        List<Object[]> vuelos;        
//        vuelos = consulta.from(vuelo0, vuelo1)
//                    .where(vuelo0.aeropuertoDestino.eq(vuelo1.aeropuertoOrigen)
//                        .and(vuelo0.llegadaest.before(vuelo1.salidaest)))        
//                    .list(vuelo0, vuelo1);
//        
//        List<Vuelo> vuelos = consulta.from(vueloX)
//                                .list(vueloX);  
        
//        for(Object[] parDeVuelos : vuelos) {
//            System.out.println(parDeVuelos[0] + " | " + parDeVuelos[1]);
//        }
        
        for(Vuelo vuelo : vuelos) {
            System.out.println(vuelo);
        }        
                                        
    }//ok    
    
    public void prueba5() {
    
        JPAQuery consulta = new JPAQuery(
                                    Persistence.createEntityManagerFactory("pe.edu.pucp_motor-generador-rutas-RS2_jar_1.0-SNAPSHOTPU", System.getProperties())
                                        .createEntityManager());       
    
        QVuelo vueloX = QVuelo.vuelo;   
        
        Integer idVuelo = null;
        
        Vuelo vueloxx = consulta.from(vueloX).where(vueloX.idvuelo.eq(idVuelo)).singleResult(vueloX);        
    
    }    
    
}
